package com.sl.au.service;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;

import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

import com.sl.au.entity.Attachment;
import com.sl.au.repository.AttachmentRepository;

/**
 * @author Neil
 *上传附件相关服务
 */
/**
 * @author HP
 *
 */
public interface AttachmentService {

    /**
     * 附件存储位置相关的初始化
     */
    void init();

   
    /**将用户上传的文件存储到服务器硬盘，并
     * 记录到数据库
     * @param file  用户上通过表单提交的文件对象
     * @param sender 上传者
     * @param parentId  附件所在实体的ID
     * @param goupId  一般设置为NULL，除非实体里有多个附件
     */
    void save(MultipartFile file,String sender,String parentId,String groupId);

  /**将文件临时上传，返回文件目录，比如用于EXCEL导入的文件上传
 * @param file
 * @return
 */
String upload(MultipartFile file);

/**通过实体ID和组号（多种附件时使用）返回对应的所有附件
 * @param parentId 实体的ID
 * @param groupId 分组号（用于一个实体包含多种附件）
 * @return
 */
List<Attachment> getByParentId(String parentId,String groupId);

    /**将文件名与根目录组成一个文件路径
     * @param filename
     * @return
     */
    Path load(String filename);

    /**通过文件名称得到对应资源对象
     * @param filename
     * @return
     */
    Resource loadAsResource(String filename);

    /**删除单个附件
     * @param id
     * @throws IOException 
     */
    void deleteA(String id) ;
    
    /**删除附件文件及数据记录
     * @param parentId实体ID
     * @param groupId分组号（用于一个实体包含多种附件）
     */
    void deleteAll(String parentId,String groupId);

    AttachmentRepository getRepository();
    
 /**通过文件存储的ID返回指定目录的文件实体
 * @param parentDir
 * @param fileId
 * @return
 */
public File getUniqueNameFile(String parentDir, final String fileId);
}
